# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
 -------------------------------------------------
    File Name:     request_param.py
    Description:   
 -------------------------------------------------
 """
from typing import Optional, Any

from pydantic import BaseModel


class PrePareRequestModel(BaseModel):
    """
    准备请求参数

    请求参数预处理模型，继承自BaseModel。
    用于定义和验证HTTP请求的各种参数。
    """
    # Request对象的方法，如GET、POST等
    method: str
    # Request对象的URL，指定请求的地址
    url: str
    # （可选）查询字符串中发送的字典或字节，用于GET请求等
    params: Optional[str] = None
    # （可选）与请求一起发送的HTTP标头字典，用于指定请求的额外信息
    headers: Optional[dict] = None
    # （可选）用于分段编码上传的 "filename: file-like-objects" 字典。
    files: Optional[str] = None
    # （可选）正文中发送的字典、元组列表、字节或类似文件的对象，用于POST请求等
    data: Optional[Any] = None
    # （可选）用于请求体的JSON数据，将被自动序列化【注：不能取名json，会与BaseModel中属性冲突】
    json_data: Optional[Any] = None
    # （可选）身份验证元组或可调用函数，用于启用基本/摘要/自定义HTTP身份验证
    auth: Optional[str] = None
    # （可选）cookies字典或RequestsCookieJar对象，用于管理请求的cookie信息
    cookies: Optional[str] = None
    # （可选）用于注册的回调函数，以便在请求处理期间执行自定义操作
    hooks: Optional[str] = None


class MergeEnvironmentSettingsModel(BaseModel):
    """
    合并环境设置模型，继承自BaseModel。
    用于定义和验证HTTP请求的环境设置。
    """
    # merge_environment_settings（合并环境设置）

    # 实际是要有url的

    # (可选) 将协议或协议和主机名映射到代理的URL的字典。
    proxies: Optional[str] = None
    # （可选）如果设置为False，则不会自动读取响应内容
    stream: Optional[str] = None
    # （可选）如果设置为False，则不验证SSL证书
    verify: Optional[str] = None
    # （可选）指定SSL证书，可以是文件路径或证书和私钥的元组
    cert: Optional[str] = None


class SendKwargsModel(BaseModel):
    """
    发送请求参数模型，继承自BaseModel。
    用于定义和验证HTTP请求的各种参数。
    """
    # （可选）等待服务器发送数据的时间，在放弃之前，以浮点数或元组的形式表示
    timeout: Optional[str] = None
    # 默认设置为True，表示是否允许重定向
    allow_redirects: bool = True


class RequestParamModel(PrePareRequestModel, MergeEnvironmentSettingsModel, SendKwargsModel):
    """
    请求参数模型，继承自BaseModel。
    用于定义和验证HTTP请求的各种参数。
    """
    pass
